function debounce(fn, delay = 500) {
  let timer = null; // 1. 定义一个定时器变量
  return function () { // 2. 返回一个新函数
    if (timer) { // 3. 如果定时器存在
      clearTimeout(timer); // 4. 清除之前的定时器
    }
    timer = setTimeout(() => { // 5. 设置新的定时器
      fn.apply(this, arguments); // 6. 延迟结束后执行目标函数
      timer = null; // 7. 执行完毕后重置定时器
    }, delay); // 8. 延迟时间为 delay 毫秒
  };
}